'''
局部变量和全局变量
变量的作用域
变量的作用域指的是变量的有效范围，即变量可以被访问和修改的范围。
在Python中，变量的作用域分为局部变量和全局变量。
局部变量
局部变量是在函数内部定义的变量，其作用域只在函数内部。
局部变量的生命周期从函数被调用开始，到函数执行完毕结束。
局部变量的作用是为了临时保存函数中的数据，以便在函数执行完毕后释放内存。
全局变量
全局变量是在函数外部定义的变量，其作用域在整个程序中。
全局变量的生命周期从程序开始执行开始，到程序执行完毕结束。
全局变量的作用是为了在整个程序中共享数据。
'''
# 定义一个局部变量
def fun1():
    a=10
    print(a)
    print("函数1执行结束")
'''
def fun2():
    print(a)# 报错，因为a是局部变量，只能在函数fun1中访问
    print("函数2执行结束")
'''
fun1()# 调用函数fun1，输出10，函数1执行结束
#fun2()# 调用函数fun2，报错，因为a是局部变量，只能在函数fun1中访问
print("程序执行结束")# 程序执行结束
# 定义一个全局变量
num=20
def fun4():
    print ("函数4执行",num)# 输出20，因为num是全局变量，可以在函数fun4中访问
    print("="*10)
print("="*10)
def fun41():
    print("函数41执行",num)# 输出100，因为num是局部变量，可以在函数fun3中访问
fun4()# 调用函数fun4，输出20，函数4执行结束
fun41()# 调用函数fun41，输出100，函数3执行结束
print("="*10)
#就近原则
#如果局部变量和全局变量同名，就近原则会选择局部变量
score=90
def fun5():
    score=100
    print(score)# 输出100，因为score是局部变量，可以在函数fun5中访问
fun5()# 调用函数fun5，输出100，函数5执行结束
print(score)# 输出90，因为score是全局变量，可以在函数fun5外访问
print("="*20)
'''
python是弱类型动态类型语言，定义变量时不需要指定变量的类型，变量的类型是根据变量的值来确定的，变量的值可以随时改变，变量的类型也可以随时改变
声明变量和修改变量是一样的，所以不能分的清是修改全局变量还是局部变量的声明。
因此如果要在函数中修改全局变量的值，需要使用global关键字声明变量为全局变量。
'''
# 修改全局变量的值
def fun6():
    global score# 声明score为全局变量，这样就可以在函数fun6中修改全局变量的值
    score=100# 修改全局变量的值为100
    print(score)# 输出100，因为score是全局变量，可以在函数fun6中访问
fun6()# 调用函数fun6，输出100，函数6执行结束
print(score)# 输出100，因为score是全局变量，可以在函数fun6外访问